home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
426-450
/
disk_434
/
backup
/
datetos.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
2KB
|
77 lines
/*
* DATETOS.C
*
* datetos(date, str, ctl)
*/
#include <stdio.h>
#include <string.h>
#include <libraries/dos.h>
#include <libraries/dosextens.h>
typedef struct DateStamp DATESTAMP;
static char dim[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
static char *Month[12] = { "Jan","Feb","Mar","Apr","May","Jun","Jul",
"Aug","Sep","Oct","Nov","Dec" };
char *
datetos(date, str, ctl)
DATESTAMP *date;
char *str;
char *ctl;
{
long days, years;
short leap, month;
if (ctl == NULL)
ctl = "D M Y h:m:s";
days = date->ds_Days + 731; /* 1976 (ly) */
years = days / (366+365*3); /* #quad yrs */
days -= years * (366+365*3); /* days remaining */
/* 0 = jan 1 */
leap = (days <= 365); /* 0-365, is a leap yr */
years = 1976 + 4 * years; /* base yr */
if (leap == 0) { /* days >= 366 */
days -= 366; /* add a year */
++years;
years += days / 365; /* non-lyrs left */
days %= 365; /* 0-364 */
}
for (month = 0; (month==1) ? (days >= 28 + leap) : (days >= dim[month]); ++month)
days -= (month==1) ? (28 + leap) : dim[month];
{
register short i = 0;
for (; *ctl; ++ctl) {
switch(*ctl) {
case 'h':
sprintf(str+i, "%02d", date->ds_Minute / 60);
break;
case 'm':
sprintf(str+i, "%02d", date->ds_Minute % 60);
break;
case 's':
sprintf(str+i, "%02d", date->ds_Tick / 50 % 60);
break;
case 'Y':
sprintf(str+i, "%ld", years);
break;
case 'M':
strcpy(str+i, Month[month]);
break;
case 'D':
sprintf(str+i,"%2ld", days+1);
break;
default:
str[i] = *ctl;
str[i+1] = 0;
break;
}
i += strlen(str+i);
}
}
return(str);
}